package com.webserver.servlet;

import com.webserver.http.HttpRequest;
import com.webserver.http.HttpResponse;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;

/**
 * 用户注册业务处理类
 */
public class RegServlet {
    public void service(HttpRequest request, HttpResponse response) {
        System.out.println("RegServlet：开始处理注册业务……");
        //1.通过request获取注册页面上表单中用户注册信息
        //这里getParameter
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String nickname = request.getParameter("nickname");
        String ageStr = request.getParameter("ageStr");
        System.out.println(username);
        System.out.println(password);
        System.out.println(nickname);
        System.out.println(ageStr);
        /*
        提供一个提示页面：webapps/root/reg_input_error.html
        该页面居中显示一行字：注册信息有误！请重新注册
        可以提供一个超链接，返回到注册页面
        在这里添加一个判断，如果用户名，昵称，年龄，密码有null的，或者年龄不是
        一个数字的都直接跳转到上述页面，而不作下面的注册操作
         */
        if (username==null || password==null || nickname==null || ageStr==null
                ||
                ageStr.matches("\\D+")) {
            File file = new File("./webapps/myweb/reg_input_error.html");
            response.setEntity(file);
            return;
        }
            int age = Integer.parseInt(ageStr);
            //2.将注册信息写入文件user.dat中保存
        /*
        每条记录占用100字节，其中用户名，昵称，密码为字符串各占32字节，年龄为int占4字节
         */
            try (
                    RandomAccessFile raf = new RandomAccessFile("user.dat", "rw")
            ) {
                //验证该用户是否为重复用户
                /*
                读取现有的每条记录的用户名，并与当前注册的用户名比对，如果存在，则直接
                跳转页面webapps/root/have_user.html(居中一行字：该用户已经存在，
                请重新注册)
                否则执行下面的注册工作
                 */
                for (int i = 0; i <raf.length()/100 ; i++) {
                    byte[]data=new byte[32];
                    raf.seek(i*100);//移动指针到每条记录开始的位置
                    String record=new String(data,"utf-8").trim();
                    if (username.equalsIgnoreCase(record)){
                        File file=new File("./webapps/myweb/have_user.html");
                        response.setEntity(file);
                        return;
                    }
                }
                raf.seek(raf.length());
                //写入用户名
                byte[] data = username.getBytes("utf-8");
                //将数组扩容到32字节
                data = Arrays.copyOf(data, 32);
                raf.write(data);
                //写入密码
                data = password.getBytes("utf-8");
                data = Arrays.copyOf(data, 32);
                raf.write(data);
                //写入昵称
                data = nickname.getBytes("utf-8");
                data = Arrays.copyOf(data, 32);
                raf.write(data);
                //写入年龄
                raf.writeInt(age);
                System.out.println("注册完毕！！！");
            } catch (IOException e) {
                e.printStackTrace();
            }
            //3.设置response响应注册结果页面
            File file = new File("./webapps/myweb/reg_success.html");
            response.setEntity(file);
            System.out.println("RegServlet：注册业务处理完毕！！！");
        }
}
